const jwt = require("jsonwebtoken");
const { User } = require("../models");
const { Unauthorized } = require('http-errors');
const { success, failure } = require("../utils/responses");

// 验证用户是否登录
module.exports = async (req, res, next) => {
  try {
    // 判断 Token 是否存在
    const { token } = req.headers;
    if (!token) {
      throw new Unauthorized("当前接口需要认证才能访问。");
    }
    // 验证 Token 是否正确, 解析出 userId, userId 是 JWT 签发时写入的
    const { userId } = jwt.verify(token, process.env.JWT_SECRET);

    // 如果验证通过, 则将 当前用户ID 挂载到请求对象(req), 方便后续中间件或路由使用
    req.userId = userId;
    // (进入)调用下一个中间件或路由
    next();
  } catch (error) {
    failure(res, error);
  }
};
